package com.um.jdy.common.charge.service;

import com.um.jdy.common.charge.entity.vo.EboxOrderVO;
import com.um.jdy.common.charge.entity.vo.EvOrderVO;
import com.um.jdy.common.charge.entity.vo.OrderEnergyItem;
import com.um.jdy.common.charge.entity.vo.OrderVO;
import com.um.springboot.starter.orm.service.BaseEntityService;
import com.um.jdy.common.charge.entity.po.Order;

import java.util.Date;
import java.util.List;

/**
 * 服务接口：充电订单表
 */
public interface OrderService extends BaseEntityService<Order> {

    /**
     * 当前充电电量
     * @param orderId
     * @return
     */
    int getCapacity(String orderId);

    /**
     * 查询电费+服务费总额
     * @param order
     * @param energyPrice
     * @param servicePrice
     * @return
     */
    int getEnergyAndServiceFee(Order order,int energyPrice,int servicePrice,int second);

    /**
     * 查询电费
     * @param order
     * @param energyPrice
     * @return
     */
    int getTimeEnergyFee(Order order,int energyPrice);

    /**
     * 查询服务费
     * @param order
     * @param servicePrice
     * @return
     */
    int getTimeServiceFee(Order order,int servicePrice,int second);

    /**
     * 查询充电电费的费用
     * @param orderId
     * @return
     */
    int getEnergyFee(String orderId);

    /**
     * 查询充电服务费的费用
     * @param orderId
     * @return
     */
    int getServiceFee(String orderId);

    /**
     * 获取订单充电时间（秒）
     *
     * @param order
     * @param currentTime
     * @return
     */
    Integer getOrderChargeSeconds(Order order, Date currentTime);

    /**
     * 查询充电时段费用明细
     * @param orderId
     * @return
     */
    List<OrderEnergyItem> getOrderFeeList(String orderId);

    /**
     * 查询开始电表值
     * @param orderId
     * @return
     */
    Long getBeginEnergy(String orderId);

    /**
     * 查询最后的电表值
     * @param orderId
     * @return
     */
    Long getEndEnergy(String orderId,Long beginEnergy);

    /**
     * 计算汽车占位费
     * @param order
     * @param evOrder
     */
    void calcEVOrderPlaceFee(OrderVO order, EvOrderVO evOrder);

    /**
     * 计算充电柜占位费
     * @param order
     * @param eboxOrder
     */
    void calcEBoxOrderPlaceFee(OrderVO order, EboxOrderVO eboxOrder);

    /**
     * 实时计算时长和费用
     * @param orderVO
     */
    void setOrderDurationAndAmount(OrderVO orderVO);

    /**
     * 更新充电桩的用户余额
     * @param userId
     * @param cardNo
     * @param balance
     */
    void remoteUpdateEVChargeBalance(String userId,String cardNo,Integer balance);

    /**
     * 查询汽车充电未完成或未支付的订单数量
     * @param userId
     * @param comId
     * @return
     */
    Long getUnFinishEVOrders(String userId,String comId);
}
